[IA64] vcpu hot-plug/remove for VTi
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Fri, 16 Feb 2007 22:49:05 +0000 (15:49 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Fri, 16 Feb 2007 22:49:05 +0000 (15:49 -0700)
Return to SAL added for VTi by adding a new SAL (OEM defined) function.
Using this patch I was able to hot-add/hot-remove under linux (in fact
virtualized hot).

Signed-off-by: Tristan Gingold <tgingold@free.fr>
xen/arch/ia64/vmx/vlsapic.c
xen/arch/ia64/xen/fw_emul.c
xen/include/asm-ia64/dom_fw.h

index 4bc9ab5cc7e2755b02c6174b4cc1bf5bdd4231e5..979571620d1af60dfc843e3c45bdf81e2bd67386 100644 (file)
@@ -672,7 +672,9 @@ static void vlsapic_write_ipi(VCPU *vcpu, uint64_t addr, uint64_t value)
     if (targ == NULL)
         panic_domain(NULL, "Unknown IPI cpu\n");
 
-    if (!test_bit(_VCPUF_initialised, &targ->vcpu_flags)) {
+    if (!test_bit(_VCPUF_initialised, &targ->vcpu_flags) ||
+        test_bit(_VCPUF_down, &targ->vcpu_flags)) {
+
         struct pt_regs *targ_regs = vcpu_regs(targ);
         struct vcpu_guest_context c;
 
index 1a2f5b5173a3100bfdce5e4cd01c619b5800e0b2..8a4897deaf547a5a380c4c7259043788b1e07947 100644 (file)
@@ -371,6 +371,10 @@ sal_emulator (long index, unsigned long in1, unsigned long in2,
            case SAL_UPDATE_PAL:
                printk("*** CALLED SAL_UPDATE_PAL.  IGNORED...\n");
                break;
+           case SAL_XEN_SAL_RETURN:
+               if (!test_and_set_bit(_VCPUF_down, &current->vcpu_flags))
+                       vcpu_sleep_nosync(current);
+               break;
            default:
                printk("*** CALLED SAL_ WITH UNKNOWN INDEX.  IGNORED...\n");
                status = -1;
index fcf2cb5739caa2f5bc9aa7737c78434dedc95a1f..6dc204ebda7a03cdb23ff8d04f9a50ed57d0eba0 100644 (file)
 
 #define EFI_MEMDESC_VERSION            1
 
+/* Additionnal OEM SAL.  */
+#define SAL_XEN_SAL_RETURN     0x02000000
+
 extern struct ia64_pal_retval xen_pal_emulator(u64, u64, u64, u64);
 extern struct sal_ret_values sal_emulator (long index, unsigned long in1, unsigned long in2, unsigned long in3, unsigned long in4, unsigned long in5, unsigned long in6, unsigned long in7);
 extern struct ia64_pal_retval pal_emulator_static (unsigned long);